package net.sk.china.city.talk.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import net.sk.china.city.talk.model.system.CityAdmin;
import net.sk.china.city.talk.request.system.SystemAdminAddRequest;
import net.sk.china.city.talk.request.system.SystemAdminRequest;
import net.sk.china.city.talk.request.system.SystemAdminUpdateRequest;
import net.sk.china.city.talk.response.system.SystemAdminResponse;
import net.sk.china.common.request.PageParamRequest;

import java.util.HashMap;
import java.util.List;

/**
 * SystemAdminService 接口
 * +----------------------------------------------------------------------
 * | Talk To [ 聊来改善地区金融服务环境，助力企业发展 ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2018-2024 聊来All rights reserved.
 * +----------------------------------------------------------------------
 * | Licensed ( <a href="http://www.apache.org/licenses/LICENSE-2.0">apache</a> )
 * +----------------------------------------------------------------------
 * | @Author: 聊来 <18970881148@qq.com>
 * +----------------------------------------------------------------------
 * | DateTime: 2024/6/2 15:27
 * +----------------------------------------------------------------------
 */
public interface SystemAdminService  extends IService<CityAdmin> {

    /**
     * 后台管理员列表
     * @param request 请求参数
     * @param pageParamRequest 分页参数
     * @return {@code PageInfo<SystemAdminResponse>}
     */
    PageInfo<SystemAdminResponse> getList(SystemAdminRequest request, PageParamRequest pageParamRequest);

    /**
     * 新增管理员
     * @param request 请求数据
     * @return {@code Boolean}
     */
    Boolean saveAdmin(SystemAdminAddRequest request);

    /**
     * 更新管理员
     * @param request 请求数据
     * @return {@code Boolean}
     */
    Boolean updateAdmin(SystemAdminUpdateRequest request);

    /**
     * 修改后台管理员状态
     * @param id 管理员id
     * @param status 状态
     * @return {@code Boolean}
     */
    Boolean updateStatus(Integer id, Boolean status);

    /**
     * 根据idList获取Map
     * @param adminIdList id数组
     * @return {@code HashMap<Integer, SystemAdmin>}
     */
    HashMap<Integer, CityAdmin> getMapInId(List<Integer> adminIdList);

    /**
     * 修改后台管理员是否接收状态
     * @param id 管理员id
     * @return {@code boolean}
     */
    boolean updateIsSms(Integer id);

    /**
     * 管理员详情
     * @param id 管理员id
     * @return {@code SystemAdmin}
     */
    CityAdmin getDetail(Integer id);

    /**
     * 通过用户名获取信息
     * @param username 用户名
     * @return {@code SystemAdmin}
     */
    CityAdmin selectUserByUserName(String username);

    /**
     * 管理员名称唯一校验
     * @param account 管理员账号
     * @return {@code Long}
     */
    Long checkAccount(String account);

    /**
     * 校验账号唯一性（管理员更新时）
     * @param id 管理员id
     * @param account 管理员账号
     */
    void verifyAccount(Integer id, String account);


    /**
     * 删除管理员
     * @param id 管理员ID
     * @return {@code boolean}
     */
    boolean deleteById(Integer id);
}